matlab三个自变量一个因变量拟合

fit_nonlinear_data.m

function [beta, r]=fit_nonlinear_data(X, Y, choose)
% Input: X 自变量数据(N, D), Y 因变量(N, 1),choose 1-regress, 2-nlinfit 3-lsqcurvefit
if choose==1
    X1=[ones(length(X(:, 1)), 1), X];
    [beta, bint, r, rint, states]=regress(Y, X1)
    % 多元线性回归
    % y=beta(1)+beta(2)*x1+beta(3)*x2+beta(4)*x3+...
    % beta—系数估计
    % bint—系数估计的上下置信界
    % r—残差
    % rint—诊断异常值的区间
    % states—模型统计信息
    rcoplot(r, rint)
    saveas(gcf,sprintf('线性曲线拟合_残差图.jpg'),'bmp');
elseif choose==2
    beta0=ones(7, 1);
    % 初始值的选取可能会导致结果具有较大的误差。
    [beta, r, J]=nlinfit(X, Y, @myfun, beta0)
    % 非线性回归
    % beta—系数估计
    % r—残差
    % J—雅可比矩阵
    [Ypred,delta]=nlpredci(@myfun, X, beta, r, 'Jacobian', J)
    % 非线性回归预测置信区间
    % Ypred—预测响应
    % delta—置信区间半角
    plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
    saveas(gcf,sprintf('非线性曲线拟合_1.jpg'),'bmp');
elseif choose==3
    beta0=ones(7, 1);
    % 初始值的选取可能会导致结果具有较大的误差。
    [beta,resnorm,r, ~, ~, ~, J]=lsqcurvefit(@myfun,beta0,X,Y)
    % 在最小二乘意义上解决非线性曲线拟合(数据拟合)问题
    % beta—系数估计
    % resnorm—残差的平方范数 sum((fun(x,xdata)-ydata).^2)
    % r—残差 r=fun(x,xdata)-ydata
    % J—雅可比矩阵
    [Ypred,delta]=nlpredci(@myfun, X, beta, r, 'Jacobian', J)
    plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
    saveas(gcf,sprintf('非线性曲线拟合_2.jpg'),'bmp');
end
end
 
 
function yy=myfun(beta,x) %自定义拟合函数
yy=beta(1)+beta(2)*x(:, 1)+beta(3)*x(:, 2)+beta(4)*x(:, 3)+beta(5)*(x(:, 1).^2)+beta(6)*(x(:, 2).^2)+beta(7)*(x(:, 3).^2);
end

demo.m

%x,y为离散点横纵坐标
clear
clc
X=[ 63.50 73.60 30.90 ;
    67.90 77.90 33.20;
    61.90 74.10 31.20;
    64.20 76.50 32.50;
    66.70 76.50 32.50];
Y=[64.00;73.80 ;65.60;70.30;69.50];
choose=1;
fit_nonlinear_data(X, Y, choose)

在这里插入图片描述

拟合羊的体重

#重量估计,输入体高,体长,体宽,输出估计重量
#公式:y = beta(1) + beta(2) * x1 + beta(3) * x2 + beta(4) * x3
def sheep_weight_estimation(body_length,body_height,body_width):
    #matlab多项式拟合
    k1 =-288.7822
    k2 =  -0.4094
    k3 = 14.2552
    k4 = -21.6917
    sheep_weight=k1 + k2*body_height  + k3*body_length + k4*body_width

    return sheep_weight

参考:https://www.cnblogs.com/kailugaji/p/13086180.html

  • 8
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MATLAB中使用高斯拟合时,我们需要拥有三个自变量一个因变量的数据。首先,确保数据已经导入到MATLAB工作环境中,然后按照以下步骤进行高斯拟合: 1. 创建自变量因变量的向量。 我们需要创建三个自变量一个因变量的向量。假设这些向量分别为x,y,z和f。 2. 确定高斯函数的形式。 高斯函数通常由均值(μ)、标准差(σ)和振幅(A)三个参数表示。因此,我们需要确定高斯函数的形式,例如f = A * exp(-((x-μ)^2 + (y-μ)^2 + (z-μ)^2) / (2*σ^2))。 3. 定义高斯函数。 在MATLAB中,我们可以使用自定义函数来定义高斯函数。在函数中,将三个自变量(x,y,z)和三个参数(μ,σ,A)作为输入,并返回对应的因变量值。 4. 通过最小二乘法进行拟合。 使用MATLAB提供的拟合函数,如lsqcurvefit,将定义的高斯函数与实际数据进行拟合。该函数将自变量因变量的向量,以及高斯函数的初始猜测参数作为输入,并返回最优参数值。 5. 分析拟合结果。 查看最优参数值并进行分析,判断拟合结果的质量。可以使用拟合曲线与实际数据进行比较,或计算拟合的R平方值来评估拟合效果。 总结而言,MATLAB中的高斯拟合需要创建自变量因变量的向量,定义高斯函数,通过最小二乘法进行拟合,并分析拟合结果。希望以上的回答对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翟羽嚄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值